home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 June / EnigmA AMIGA RUN 08 (1996)(G.R. Edizioni)(IT)[!][issue 1996-06][EARSAN CD VII].iso / earcd / utilsys / rss14gmd.lha / RSys_1.4gmd / C / Displays.c < prev    next >
C/C++ Source or Header  |  1996-05-04  |  14KB  |  627 lines

  1. /*
  2.    ***************************************************************************
  3.    *
  4.    * Datei:
  5.    *      RSysDisplays.c
  6.    *
  7.    * Inhalt:
  8.    *
  9.    *      --- Globale Routinen ---
  10.    *
  11.    *    int DisplayDiskInfo ( char *filename , int with_tree );
  12.    *    int DisplayFileInfo ( char *filename );
  13.    *    int DisplayFontInfo ( RSYS_Objid *obj );
  14.    *    int DisplayLibraryInfo ( RSYS_Objid *obj );
  15.    *    int DisplayLockInfo ( RSYS_Objid *obj );
  16.    *    int DisplayPortInfo ( RSYS_Objid *obj );
  17.    *    int DisplayScreenInfo ( RSYS_Objid *obj );
  18.    *    int DisplayTaskInfo ( RSYS_Objid *obj );
  19.    *    int DisplayWindowInfo ( RSYS_Objid *obj );
  20.    *    void DisplayDirectoryInfo ( char *filename );
  21.    *    void DisplayResourceInfo ( RSYS_Objid *obj );
  22.    *    void DisplaySoftDevInfo ( RSYS_Objid *obj );
  23.    *
  24.    *      --- Lokale  Routinen ---
  25.    *
  26.    *    static char *makelibflags ( LIBRARY *lib , char *flags );
  27.    *    static void savecpyid ( char *IDStr , LIBRARY *lib );
  28.    *
  29.    * Bemerkungen:
  30.    *      Funktionen zur Anzeige weiterer Informationen zu ausgewählten
  31.    *      Objekten.
  32.    *
  33.    * Erstellungsdatum:
  34.    *      07-Jul-93     Rolf Böhme
  35.    *
  36.    * Änderungen:
  37.    *      07-Jul-93     Rolf Böhme        Erstellung
  38.    *
  39.    *
  40.    * NOTE: all funcs calling MyEasyRequest() rewritten to sprintf
  41.    *            buffer locally for ease of examination.
  42.    *
  43.    *
  44.    ***************************************************************************
  45.  */
  46.  
  47. #include "RSys.h"
  48. #include "protos.h"
  49.  
  50.  /*
  51.   * DisplayDiskInfo() zeigt eine Info über ein Volume an.
  52.   * Auf Wunsch kann die Verzeichnisstruktur angezeigt
  53.   * werden
  54.   */
  55. int
  56. DisplayDiskInfo (char *filename, int with_tree)
  57. {
  58.   int sel;
  59.   long free = 0L, used = 0L, percentused = 0L;
  60.   char state[50], type[60];
  61.  
  62.   char xxxx[1000];
  63.  
  64.   DPOS;
  65.  
  66.   FreeBytes (filename, &free, &used, &percentused, state, type);
  67.  
  68.   sprintf (xxxx,
  69.        (UBYTE *) "Name    : %-20.20s\n"
  70.        "Size    : %7ld KBytes\n"
  71.        "Free    : %7ld KBytes\n"
  72.        "Used    : %7ld KBytes\n"
  73.        "%%%% used  : %3ld%%%%\n"
  74.        "State   : %s\n"
  75.        "Type    : %s",
  76.  
  77.        filename,
  78.        free + used,
  79.        free,
  80.        used,
  81.        percentused,
  82.        state,
  83.        type);
  84.  
  85.   sel = MyEasyRequest (SysWnd, (UBYTE *) NAME " - Volume/Device Info",
  86.              (UBYTE *) ((with_tree) ? "Tree|Continue" : "Continue"),
  87.                xxxx);
  88.   return sel;
  89. }
  90.  
  91.  /*
  92.   * DisplayFileInfo() zeigt Infos über eine Datei an.
  93.   * Handelt es sich um ein Executable, kann eine Hunk-Liste
  94.   * erzeugt werden lassen
  95.   */
  96. int
  97. DisplayFileInfo (char *filename)
  98. {
  99.   char path[MAXFULLNAME], *help, file[MAXFULLNAME];
  100.   int ftype = filetype (filename);
  101.   int sel;
  102.  
  103.   char xxxx[1000];
  104.  
  105.   DPOS;
  106.  
  107.   strncpy (path, filename, MAXFULLNAME);
  108.   help = (char *) PathPart ((UBYTE *) path);
  109.   *help = STRINGEND;
  110.  
  111.   strncpy (file, (char *) FilePart ((UBYTE *) filename), MAXFULLNAME);
  112.  
  113.   sprintf (xxxx,
  114.        (UBYTE *) "Filename : %-20.20s\n"
  115.        "Path     : %s\n"
  116.        "Size     : %ld Bytes\n"
  117.        "Type     : %s",
  118.  
  119.        file,
  120.        path,
  121.        SizeOfFile (filename),
  122.        mess[ftype]);
  123.  
  124.   sel = MyEasyRequest (NULL, (UBYTE *) NAME " - File Info",
  125.                (UBYTE *) ((ftype == TYPE_EXECUTABLE) ?
  126.                   "Hunk list|Continue" : "Continue"),
  127.                xxxx);
  128.  
  129.   if (ftype != TYPE_EXECUTABLE)
  130.     return TRUE;
  131.  
  132.   return sel;
  133. }
  134.  
  135.  /*
  136.   * DisplayDirectoryInfo() zeigt Infos über ein Verzeichnis
  137.   * an
  138.   */
  139. void
  140. DisplayDirectoryInfo (char *filename)
  141. {
  142.   int count, Dirs = 0;
  143.   long Size = 0L;
  144.   char path[MAXFULLNAME], *help;
  145.   BPTR lock;
  146.  
  147.   char xxxx[1000];
  148.  
  149.   DPOS;
  150.  
  151.   strncpy (path, filename, MAXFULLNAME);
  152.   help = (char *) PathPart ((UBYTE *) path);
  153.   *help = STRINGEND;
  154.  
  155.   if (lock = Lock ((UBYTE *) path, MODE_OLDFILE))
  156.     {
  157.       count = SizeOfDir (lock, &Size, &Dirs);
  158.       UnLock (lock);
  159.     }
  160.   else
  161.     {
  162.       count = Size = Dirs = 0;
  163.     }
  164.  
  165.   sprintf (xxxx,
  166.        (UBYTE *) "Path       : %s\n"
  167.        "# Files    : %ld\n"
  168.        "# Sub-Dirs : %ld\n"
  169.        "Total      : %ld Bytes",
  170.        path, count, Dirs, Size);
  171.  
  172.   MyEasyRequest (NULL,
  173.          (UBYTE *) NAME " - Directory Info", (UBYTE *) "Continue",
  174.          xxxx);
  175.  
  176.   return;
  177. }
  178.  
  179.  /*
  180.   * DisplayTaskInfo() zeigt Infos über einen Task an. Auf
  181.   * Wunsch kann der Task gekillt, ein Signal gesendet oder
  182.   * die Priorität geändert werden
  183.   */
  184. int
  185. DisplayTaskInfo (RSYS_Objid * obj)
  186. {
  187.   TASK *task = (TASK *) obj->address, display_task;
  188.   char *status[] =
  189.   {
  190.     "Invalid", "Adding ", "Running", "Ready ", "Waiting", "Except", "Remove"
  191.   };
  192.   int sel = 7, wins = 0, scrs = 0, ports = 0;
  193.  
  194.   char xxxx[1000];
  195.  
  196.   DPOS;
  197.  
  198.   Disable ();
  199.   CopyMem (task, &display_task, sizeof (TASK));
  200.   Enable ();
  201.  
  202.   CountAssocObjects (task, &wins, &scrs, &ports);
  203.  
  204.   sprintf (xxxx,
  205.        "Name      : %-20.20s  (%s) Prio: %-4ld\n"
  206.        "Address   : 0x%08X  Flags     : 0x%08X\n"
  207.        "State     : %-8s    IDNest    : %-8ld\n"
  208.        "TDNest    : %-8ld    SigAlloc  : 0x%08X\n"
  209.        "SigWait   : 0x%08X  SigRecvd  : 0x%08X\n"
  210.        "SigExcept : 0x%08X  Stack     : %-5ld\n\n"
  211.        "Associated Objects\n"
  212.        "Ports     : %4ld - Windows : %4ld\n"
  213.        "Screens   : %4ld",
  214.  
  215.        obj->fullname,
  216.        (display_task.tc_Node.ln_Type == NT_TASK) ? "Task" : "Process",
  217.        display_task.tc_Node.ln_Pri,
  218.        task,
  219.        display_task.tc_Flags,
  220.        status[display_task.tc_State],
  221.        display_task.tc_IDNestCnt,
  222.        display_task.tc_TDNestCnt,
  223.        display_task.tc_SigAlloc,
  224.        display_task.tc_SigWait,
  225.        display_task.tc_SigRecvd,
  226.        display_task.tc_SigExcept,
  227.     ((ULONG) display_task.tc_SPUpper - (ULONG) display_task.tc_SPLower),
  228.        ports,
  229.        wins,
  230.        scrs);
  231.  
  232.   sel = MyEasyRequest (SysWnd, get_vers (" - Task Control"),
  233.                "Kill!|^C|^D|^E|^F|Prio|Continue",
  234.                xxxx);
  235.   return sel;
  236. }
  237.  
  238.  /*
  239.   * savecpyid() kopiert den ID-String einer Library in ein
  240.   * Zeichenfeld. Am Ende des Strings erscheinen häufig zwei
  241.   * Sonderzeichen, die hier entfernt werden
  242.   *
  243.   *
  244.   * hacked by GMD
  245.   *
  246.   */
  247. static void
  248. savecpyid (char *IDStr, LIBRARY * lib)
  249. {
  250.   char *id = (char *) lib->lib_IdString;
  251.   int j;
  252.  
  253.  
  254.   for (j = 0; j < 40; ++j)
  255.     {
  256.       IDStr[j] = '\0';
  257.     }
  258.  
  259.   if (id && *id)
  260.     {
  261.       for (j = 0; (j < 40) && (*id); ++j)    /* remove CR/LF */
  262.     {
  263.       if ((*id == '\n') || (*id == '\r'))
  264.         IDStr[j] = '\0';
  265.       else
  266.         IDStr[j] = *id++;
  267.     }
  268.  
  269.     }
  270.   else
  271.     strcpy (IDStr, field[NO_LIB_ID]);
  272.  
  273.   return;
  274. }
  275.  
  276.  /*
  277.   * makelibflags() erzeugt entsprechend der Library-Flags
  278.   * einen "lesbaren" String
  279.   */
  280. static char *
  281. makelibflags (LIBRARY * lib, char *flags)
  282. {
  283.  
  284.   if (lib->lib_Flags == 0)
  285.     strcpy (flags, field[NO_FLAGS]);
  286.   else
  287.     sprintf (flags, "%10s %10s %10s %10s",
  288.     (lib->lib_Flags & LIBF_SUMUSED) ? "ResetByErr" : field[BLANK_FIELD],
  289.       (lib->lib_Flags & LIBF_SUMMING) ? "CheckSum" : field[BLANK_FIELD],
  290.        (lib->lib_Flags & LIBF_CHANGED) ? "Changed" : field[BLANK_FIELD],
  291.     (lib->lib_Flags & LIBF_DELEXP) ? "DelExpunge" : field[BLANK_FIELD]);
  292.  
  293.   return flags;
  294. }
  295.  
  296.  /*
  297.   * DisplayLibraryInfo() zeigt alle Infos über eine Library
  298.   * an
  299.   */
  300. int
  301. DisplayLibraryInfo (RSYS_Objid * obj)
  302. {
  303.   int sel;
  304.   LIBRARY *lib = (LIBRARY *) obj->address;
  305.   char IDStr[100];
  306.   char xflags[100];
  307.  
  308.   char xxx[1000];
  309.  
  310.   makelibflags (lib, xflags);
  311.  
  312.   DPOS;
  313.  
  314.   savecpyid (IDStr, lib);
  315.  
  316.   sprintf (xxx,
  317.        "Type           : Library\n"
  318.        "Name           : %s\n"
  319.        "ID-String      : %-30.30s\n"
  320.        "Address        : 0x%08X\n"
  321.        "Flags          : %s\n"
  322.        "Jump-Table-Size: %4ld Bytes   Data-Size   : %ld Bytes\n"
  323.        "CheckSum       : 0x%08X",
  324.  
  325.        obj->fullname,
  326.        IDStr,
  327.        obj->address,
  328.        xflags,
  329.        lib->lib_NegSize,
  330.        lib->lib_PosSize,
  331.        lib->lib_Sum
  332.     );
  333.  
  334.   sel = MyEasyRequest (SysWnd, get_vers (" - Library Control"),
  335.                "Remove Library|Continue",
  336.                xxx
  337.     );
  338.  
  339.   return sel;
  340. }
  341.  
  342.  /*
  343.   * DisplaySoftDevInfo() zeigt alle Infos über ein
  344.   * *.device an
  345.   */
  346. void
  347. DisplaySoftDevInfo (RSYS_Objid * obj)
  348. {
  349.   LIBRARY *lib = (LIBRARY *) obj->address;
  350.   char IDStr[100];
  351.   char xflags[100];
  352.  
  353.   char xxxx[1000];
  354.  
  355.   makelibflags (lib, xflags);
  356.  
  357.   DPOS;
  358.  
  359.   savecpyid (IDStr, lib);
  360.  
  361.   sprintf (xxxx,
  362.        "Type           : Software Device\n"
  363.        "Name           : %s\n"
  364.        "ID-String      : %-30.30s\n"
  365.        "Address        : 0x%08X\n"
  366.        "Flags          : %s\n"
  367.        "Jump-Table-Size: %4ld Bytes   Data-Size   : %ld Bytes\n"
  368.        "CheckSum       : 0x%08X",
  369.  
  370.        obj->fullname,
  371.        IDStr,
  372.        obj->address,
  373.        xflags,
  374.        lib->lib_NegSize,
  375.        lib->lib_PosSize,
  376.        lib->lib_Sum);
  377.  
  378.   MyEasyRequest (SysWnd,
  379.          get_vers (" - Software Device Info"),
  380.          "Continue",
  381.          xxxx);
  382.  
  383.   return;
  384. }
  385.  
  386.  /*
  387.   * DisplayResourceInfo() zeigt alle Infos über eine .resource
  388.   * an
  389.   */
  390. void
  391. DisplayResourceInfo (RSYS_Objid * obj)
  392. {
  393.   LIBRARY *lib = (LIBRARY *) obj->address;
  394.   char xflags[100];
  395.  
  396.   char xxxx[1000];
  397.  
  398.   makelibflags (lib, xflags);
  399.  
  400.   DPOS;
  401.  
  402.   sprintf (xxxx,
  403.        (UBYTE *) "Type           : Resource\n"
  404.        "Name           : %s\n"
  405.        "Address        : 0x%08X\n"
  406.        "Flags          : %s\n"
  407.        "Jump-Table-Size: %4ld Bytes   Data-Size   : %ld Bytes\n"
  408.        "CheckSum       : 0x%08X",
  409.  
  410.        obj->fullname,
  411.        obj->address,
  412.        xflags,
  413.        lib->lib_NegSize,
  414.        lib->lib_PosSize,
  415.        lib->lib_Sum);
  416.  
  417.   MyEasyRequest (SysWnd,
  418.          get_vers (" - ResourceInfo"),
  419.          (UBYTE *) "Continue",
  420.          xxxx);
  421.   return;
  422. }
  423.  
  424.  /*
  425.   * DisplayPortInfo() zeigt Infos über einen Port an
  426.   */
  427. int
  428. DisplayPortInfo (RSYS_Objid * obj)
  429. {
  430.   int sel;
  431.   MSGPORT *port;
  432.   char sigtask[MAXFULLNAME];
  433.   TASK *task;
  434.   char *yflags[] =
  435.   {
  436.     "Signal", "SoftInt", "Ignore"
  437.   };
  438.  
  439.   char xxxx[1000];
  440.  
  441.   DPOS;
  442.  
  443.   Disable ();
  444.   port = (MSGPORT *) obj->address;
  445.   if (port->mp_SigTask)
  446.     {
  447.       task = (TASK *) (port->mp_SigTask);
  448.       savestrcpy (sigtask, &task->tc_Node, MAXFULLNAME, NT_TASK);
  449.     }
  450.   else
  451.     strcpy (sigtask, field[NO_TASK]);
  452.  
  453.   Enable ();
  454.  
  455.   sprintf (xxxx,
  456.        (UBYTE *) "Type        : %s\n"
  457.        "Address     : 0x%08X\n"
  458.        "Name        : %-20.20s\n"
  459.        "Signal-Task : %-20.20s\n"
  460.        "Flags       : %s",
  461.  
  462.        "Port",
  463.        obj->address,
  464.        obj->fullname,
  465.        sigtask,
  466.        yflags[port->mp_Flags]);
  467.  
  468.   sel = MyEasyRequest (SysWnd, get_vers (" - Port Control"),
  469.                (UBYTE *) "Remove Port|Continue",
  470.                xxxx);
  471.  
  472.   return sel;
  473. }
  474.  
  475.  /*
  476.   * DisplayFontInfo() zeigt alle Infos über einen Font an.
  477.   * Dieser kann dann wahlweise entfernt oder angezeigt
  478.   * werden
  479.   */
  480. int
  481. DisplayFontInfo (RSYS_Objid * obj)
  482. {
  483.   int sel;
  484.  
  485.   char xxxx[1000];
  486.  
  487.   DPOS;
  488.  
  489.   sprintf (xxxx,
  490.        (UBYTE *) "Type    : %s\n"
  491.        "Address : 0x%08X\n"
  492.        "Name    : %s",
  493.  
  494.        "Font",
  495.        obj->address,
  496.        obj->fullname);
  497.  
  498.   sel = MyEasyRequest (SysWnd, get_vers (" - Font Control"),
  499.                (UBYTE *) "Remove Font|Show Font|Continue",
  500.                xxxx);
  501.   return sel;
  502. }
  503.  
  504.  /*
  505.   * DisplayWindowInfo() zeigt Infos über ein Fenster an
  506.   */
  507. int
  508. DisplayWindowInfo (RSYS_Objid * obj)
  509. {
  510.   int sel;
  511.   WINDOW disp_win;
  512.   ULONG lock;
  513.  
  514.   char xxxx[1000];
  515.  
  516.   DPOS;
  517.  
  518.   lock = LockIBase (NULL);
  519.   CopyMem ((WINDOW *) (obj->address), &disp_win, sizeof (WINDOW));
  520.   UnlockIBase (lock);
  521.  
  522.   sprintf (xxxx,
  523.        (UBYTE *)
  524.        "Type     : Window   Address : 0x%08X\n"
  525.        "Name     : %-30.30s\n"
  526.        "Next     : 0x%08X\n"
  527.        "LeftEdge : %-4ld        TopEdge  : %-4ld\n"
  528.        "Width    : %-4ld        Height   : %-4ld\n"
  529.        "MinWidth : %-4ld        MinHeight: %-4ld\n"
  530.        "MaxWidth : %-4ld        MaxHeight: %-4ld\n"
  531.        "Flags    : 0x%08X  Menu: %s\n"
  532.        "Requester: %3s         ReqCount: %ld  DMReq: %s\n"
  533.        "IDCMP    : 0x%08X  Detail: %-2ld   Block: %2ld",
  534.  
  535.        obj->address, obj->fullname,
  536.        disp_win.NextWindow,
  537.        disp_win.LeftEdge, disp_win.TopEdge,
  538.        disp_win.Width, disp_win.Height,
  539.        disp_win.MinWidth, disp_win.MinHeight,
  540.        disp_win.MaxWidth, disp_win.MaxHeight,
  541.        disp_win.Flags, (disp_win.MenuStrip ? "Yes" : "No"),
  542.        (disp_win.FirstRequest ? "Yes" : "No"), disp_win.ReqCount,
  543.        (disp_win.DMRequest ? "Yes" : "No"), disp_win.IDCMPFlags,
  544.        disp_win.DetailPen, disp_win.BlockPen);
  545.  
  546.   sel = MyEasyRequest (SysWnd,
  547.                get_vers (" - Window Control"),
  548.                (UBYTE *) "Close Window|Continue",
  549.                xxxx);
  550.  
  551.   return sel;
  552. }
  553.  
  554.  /*
  555.   * DisplayScreenInfo() zeigt Infos über ein Screen an
  556.   */
  557. int
  558. DisplayScreenInfo (RSYS_Objid * obj)
  559. {
  560.   int sel;
  561.   SCREEN disp_scr;
  562.   ULONG lock;
  563.  
  564.   char xxxx[1000];
  565.  
  566.   DPOS;
  567.  
  568.   lock = LockIBase (NULL);
  569.   CopyMem ((SCREEN *) (obj->address), &disp_scr, sizeof (SCREEN));
  570.   UnlockIBase (lock);
  571.  
  572.   sprintf (xxxx,
  573.        (UBYTE *) "Type     : Screen   Address : 0x%08X\n"
  574.        "Name     : %.20s\n"
  575.        "Next     : 0x%08X\n"
  576.        "LeftEdge : %-4ld  TopEdge  : %-4ld\n"
  577.        "Width    : %-4ld  Height   : %-4ld\n"
  578.        "BarHeight: %-4ld  BarVBord : %-4ld\n"
  579.        "BarHBord : %-4ld  MenuVBord: %-4ld\n"
  580.        "MenuHBord: %-4ld  WBorTop  : %-4ld\n"
  581.        "WBorLeft : %-4ld  WBorRight: %-4ld\n"
  582.        "WBorBott : %-4ld  DetailPen: %-4ld\n"
  583.        "BlockPen : %-4ld  FlashCol : %-4ld\n"
  584.        "Flags    : 0x%08X",
  585.        obj->address, obj->fullname,
  586.        disp_scr.NextScreen,
  587.        disp_scr.LeftEdge, disp_scr.TopEdge,
  588.        disp_scr.Width, disp_scr.Height,
  589.        disp_scr.BarHeight, disp_scr.BarVBorder,
  590.        disp_scr.BarHBorder, disp_scr.MenuVBorder,
  591.        disp_scr.MenuHBorder, disp_scr.WBorTop,
  592.        disp_scr.WBorLeft, disp_scr.WBorRight,
  593.        disp_scr.WBorBottom, disp_scr.DetailPen,
  594.        disp_scr.BlockPen, disp_scr.SaveColor0,
  595.        disp_scr.Flags);
  596.  
  597.   sel = MyEasyRequest (SysWnd, get_vers (" - Screen Control"),
  598.                (UBYTE *) "Close Screen|Continue",
  599.                xxxx);
  600.   return sel;
  601. }
  602.  
  603. int
  604. DisplayLockInfo (RSYS_Objid * obj)
  605. {
  606.   int sel;
  607.   int ftype = filetype (obj->fullname);
  608.  
  609.   char xxxx[1000];
  610.  
  611.   sprintf (xxxx,
  612.        (UBYTE *) "Type      : Lock\n"
  613.        "File      : %s\n"
  614.        "Address   : 0x%08X\n"
  615.        "File type : %s",
  616.  
  617.        obj->fullname,
  618.        obj->address,
  619.        mess[ftype]);
  620.  
  621.   sel = MyEasyRequest (SysWnd, get_vers (" - FileLock Control"),
  622.                (UBYTE *) (ftype ? "Unlock|Continue" : "Continue"),
  623.                xxxx);
  624.  
  625.   return (ftype ? sel : 0);
  626. }
  627.